home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / vgacodng / part08_b.pas < prev    next >
Pascal/Delphi Source File  |  1996-11-22  |  1KB  |  58 lines

  1. program Plasma_Pascal;
  2.  
  3. uses crt;
  4.  
  5. var Wert1,Wert2,Wert3,Wert4 : byte;
  6.     TWert1,TWert2,TWert3,TWert4 : byte;
  7.     SinTab : array[0..255] of byte;
  8.     n1,n2 : word;
  9.     col : byte;
  10.  
  11. procedure SetPal(col,r,g,b:byte);
  12. begin
  13.   port[$3C8] := col;
  14.   port[$3C9] := r;
  15.   port[$3C9] := g;
  16.   port[$3C9] := b;
  17. end;
  18.  
  19. procedure CalcSinus(Ofs,Amp:byte;Len,Par:word);
  20. begin
  21.   for n1 := 0 to Len do SinTab[n1] := round(sin(n1/Par*pi*Len/180*2)*Amp)+Ofs;
  22. end;
  23.  
  24.  
  25. begin
  26.   CalcSinus(32,31,255,360);
  27.   asm mov ax,13h; int 10h end;
  28.   for n1 := 0 to 127 do begin
  29.     setpal(n1,n1 div 6,n1 div 3,n1 div 3);
  30.     setpal(255-n1,n1 div 6,n1 div 3,n1 div 3);
  31.   end;
  32.   repeat
  33.     TWert3 := Wert3;
  34.     TWert4 := Wert4;
  35.     for n1 := 0 to 319 do begin
  36.       TWert1 := Wert1;
  37.       TWert2 := Wert2;
  38.       for n2 := 0 to 199 do begin
  39.         col := SinTab[TWert1] + SinTab[TWert2] +
  40.                SinTab[TWert3] + SinTab[TWert4];  { Farbwert berechnen }
  41.         mem[$A000:n2*320+n1] := col;
  42.         inc(TWert1,4);
  43.         inc(TWert2,3);
  44.       end;
  45.       inc(TWert3,4);
  46.       inc(TWert4,5);
  47.     end;
  48.     dec(Wert1,4);            { Bewegung des Plasmas }
  49.     inc(Wert3,4);
  50.     inc(Wert1,random(1));    { Zufallswerte bewirken, daß das Plasma }
  51.     dec(Wert2,random(2));    { etwas unregelmäßig wird }
  52.     inc(Wert3,random(1));
  53.     dec(Wert4,random(2));
  54.   until keypressed;
  55.   readkey;
  56.   asm mov ax,3; int 10h end;
  57. end.
  58.